package br.academia.util;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.StringTokenizer;

/**
 * Classe geral para métodos utilitários
 * 
 */
public class AcademiaUtil {

	/**
	 * Utilitário para se obter o ano atual
	 * @return Ano atual
	 */
	public static int getAnoAtual(){
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		return c.get(Calendar.YEAR);
	}
	
	/**
	 * Valida endereços de mail
	 *
	 * @param email
	 * @return true se email for válido
	 */
	public static boolean validaEmail(String email) {
		return (email != null && email.length() > 0
				&& email.trim().equals(email) && email.contains(".")
				&& email.contains("@") && !email.contains(" "));
	}
	
	public static String stripHtmlTags(String html) {
		if (html == null) {
			return null;
		}
		return html.replaceAll("\\<.*?>","");
	}
	
	/**
	 * Utilitário para se obter o mes atual
	 * @return Mes atual
	 */
	public static int getMesAtual() {
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		return c.get(Calendar.MONTH);
	}
	
	/**
	 * Verifica se uma classe tem um determinado atributo. Muito útil, por
	 * exemplo, quando se quer verificar o atributo "ativo" no DAO, onde só
	 * temos a classe e não o objeto
	 */
	public static String evalProperty(Object obj, String property) {
		try {
			property = property.trim();
			StringTokenizer st = new StringTokenizer(property, ".");
			String propertyInsideToken;

			Object atual = obj;
			Class<?> c = obj.getClass();

			while (st.hasMoreTokens()) {
				propertyInsideToken = st.nextToken();
				atual = c.getMethod(formatMethod(propertyInsideToken),
						(Class[]) null).invoke(atual, (Object[]) null);
				if (atual == null) {
					return "";
				}

				c = atual.getClass();

			}

			return atual.toString();

		} catch (Exception e) {
			return "";
		}
	}
	
	private static String formatMethod(String field) {
		return "get" + field.substring(0, 1).toUpperCase() + field.substring(1);
	}
	
	public static String gerarStringConjuncoes(ArrayList<String> lista){
		String atributos = "";
		
		for(int i = 0; i < lista.size(); i++){
			if(i < lista.size() - 1){
				if(!Validador.isEmpty(atributos)){
					atributos += ", ";
				}
				
				atributos += lista.get(i);
			}else{
				if(!Validador.isEmpty(atributos)){
					atributos += " e ";
				}
				
				atributos += lista.get(i);
			}
		}
		
		return atributos;
	}
}

